package com.talang.surfing.batch.app.controller;

import com.talang.surfing.batch.app.entity.Good;
import com.talang.surfing.batch.app.mapper.GoodMapper;
import com.talang.surfing.batch.controller.BaseBatchController;
import com.talang.surfing.batch.dto.TaskStat;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;

/**
 * GoodController 是商品的批处理控制器，继承自基础批处理控制器 BaseBatchController。
 * 它负责处理和商品相关的批处理任务，例如创建商品索引。
 *
 * <p>
 * GoodController 接收一个商品对象，创建其索引，并在完成后更新状态。索引创建和状态更新的具体逻辑在 doBatch 方法中实现。
 *
 * <p>
 * @author wangwanbao
 * @since 2023-06-19
 */

@Controller
@Slf4j
public class GoodController extends BaseBatchController<Good, GoodMapper> {

    /**
     * 执行批处理任务的方法。
     *
     * 该方法接收一个商品对象，对其进行索引创建，并在索引创建完成后更新商品状态。
     *
     * @return TaskStat 对象，包含任务的统计信息，如任务总数、成功数、失败数等。
     */
    @Override
    public TaskStat doBatch() {
        String taskName = "创建商品索引";

        TaskStat taskStat = process(taskName, g -> {
            //模拟创建ES索引
            log.info("创建索引：标题-> {}, 价格-> {}", g.getTitle(), g.getPrice());
            return true;
        }, (g, b) -> {
            //模拟收到创建索引的回调，可以更新数据库的状态
            log.info("收到回调，Id: {}, 标题-> {}, 执行状态:{}", g.getId(), g.getTitle(), b);
        });
        return taskStat;
    }
}
